#include <iostream>
#include <string>
using namespace std;

class Car_Factory
{
public:
    virtual void Make_car() // 把他修饰为 虚函数
    {
        cout << "我是工厂基类，我只会做 三轮车" << endl;
    }
};

class Sedan : public Car_Factory
{
public:
    void Make_car() //
    {
        cout << "这是小轿车产品类，我只会做 小轿车" << endl;
    }
};

class Sports_Car : public Car_Factory
{
public:
    void Make_car() //
    {
        cout << "这是跑车产品类，我只会做 跑车" << endl;
    }
};

int main()
{
    Sedan car_1;
    Sports_Car car_2;
    Car_Factory *car_p = nullptr;
    int num;
    while (1)
    {
        cout << "xxx 机动车 生产 车间" << endl;
        cout << "1:生产小轿车" << endl;
        cout << "2:生产跑车" << endl;
        cin >> num;
        switch (num)
        {
        case 1:
            car_p = &car_1;         // 基类指针指向 派生类对象
            car_p->Make_car();      // 调用的是 派生类的 同名函数
            break;
        case 2:
            car_p = &car_2;         // 基类指针指向 派生类对象
            car_p->Make_car();      // 调用的是 派生类的 同名函数
            break;
        default:
            break;
        }
    }
    return 0;
}
